using System.Diagnostics.CodeAnalysis;
using UnityEngine;
using UnityEngine.Rendering;
using static UnityEngine.ParticleSystem;
using System.Collections.Generic;

public class ParticleSystemDummyRoot : MonoBehaviour
{
    static ParticleSystem[] EmptyParticleArray = new ParticleSystem[0];

    public static bool EnableParticleDummy = true; 
    
    public static bool UsePool = true;


    [SerializeField]
    int hashCode = 0;

    // 标记DummyRoot和它派生的Dummy是否已经被序列化过了，防止反复序列化
    public bool Recorded
    {
        get
        {
            return hashCode != 0;
        }
    }

    void Start()
    {
        // 推荐在通用对象池的母本中附加并初始化该脚本，不推荐在Start或Awake中使用。
        TryInitDummy();
    }

    // 这个步骤会将所有子物体上的粒子系统序列化到ParticleDummyManager里，并删除游戏对象上的粒子系统
    // 推荐在对象池母本上调用
    public void TryInitDummy()
    {
        // 只在第一次加载资源后实例化时生效一次，之后从对象池复制时不需要再生效了
        if (EnableParticleDummy && !Recorded)
        {

            var particles = transform.GetComponentsInChildren<ParticleSystem>(true);
            foreach (var particle in particles)
            {
                if (particle.gameObject.name == ParticleSystemPool.NakedParticleName)
                {
                    continue;
                }
                var dummy = particle.gameObject.AddComponent<ParticleSystemDummy>();
                dummy.InitParticleData();
            }
            hashCode = this.GetInstanceID();
        }
    }
}
